package com.fsnbigdata.util;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

public class Email {

    public void sendMail(String email,Integer code,String title) throws Exception{
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.163.com");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");
        prop.setProperty("mail.smtp.port","465");
        prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        //使用JavaMail发送邮件的5个步骤
        //1、创建session
        Session session = Session.getInstance(prop);
        //开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);
        //2、通过session得到transport对象
        Transport ts = session.getTransport();
        //3、使用邮箱的用户名和密码连上邮件服务器，发送邮件时，发件人需要提交邮箱的用户名和密码给smtp服务器，用户名和密码都通过验证之后才能够正常发送邮件给收件人。
        ts.connect("smtp.163.com", "ECOcloud@163.com", "sty123");
        //4、创建邮件
        Message message = createSimpleMail(session,email,code,title);
        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
        return ;
    }

    public static MimeMessage createSimpleMail(Session session, String email, Integer code, String title) throws Exception {
        //创建邮件对象
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("ECOcloud@163.com"));
        //指明邮件的收件人，现在发件人和收件人是一样的，那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
        //邮件的标题
        message.setSubject(title);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(new Date().getTime()+5*60*1000);
        //邮件的文本内容
        message.setContent("您的登录验证码是：" + code + "，有效时间至："+formatter.format(date)+"，请不要把验证码泄露给他人！", "text/html;charset=UTF-8");
        //返回创建好的邮件对象
        return message;
    }

    public void sendMailToAdmin(String email,String title,String time, int count) throws Exception{
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.163.com");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");
        prop.setProperty("mail.smtp.port","465");
        prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        //使用JavaMail发送邮件的5个步骤
        //1、创建session
        Session session = Session.getInstance(prop);
        //开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);
        //2、通过session得到transport对象
        Transport ts = session.getTransport();
        //3、使用邮箱的用户名和密码连上邮件服务器，发送邮件时，发件人需要提交邮箱的用户名和密码给smtp服务器，用户名和密码都通过验证之后才能够正常发送邮件给收件人。
        ts.connect("smtp.163.com", "ECOcloud@163.com", "sty123");
        //4、创建邮件
        Message message = createAdminMail(session,email,title,time,count);
        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
        return ;
    }

    public static MimeMessage createAdminMail(Session session, String email, String title, String time, int count) throws Exception {
        //创建邮件对象
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("ECOcloud@163.com"));
        //指明邮件的收件人，现在发件人和收件人是一样的，那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
        //邮件的标题
        message.setSubject(title);
        //邮件的文本内容
        message.setContent("您好，<br /> &emsp;&emsp;您的系统在最近"+time+"内共计登录不到"+count+"次，请您及时检查系统，排除问题。祝您生活愉快！<br /><p style='text-align:right;'>生物生态云大数据平台</p>", "text/html;charset=UTF-8");
        //返回创建好的邮件对象
        return message;
    }

    public void sendMailToAdminByException(String email,String title,String startTime,String endTime,String name, int count) throws Exception{
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.163.com");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");
        prop.setProperty("mail.smtp.port","465");
        prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        //使用JavaMail发送邮件的5个步骤
        //1、创建session
        Session session = Session.getInstance(prop);
        //开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);
        //2、通过session得到transport对象
        Transport ts = session.getTransport();
        //3、使用邮箱的用户名和密码连上邮件服务器，发送邮件时，发件人需要提交邮箱的用户名和密码给smtp服务器，用户名和密码都通过验证之后才能够正常发送邮件给收件人。
        ts.connect("smtp.163.com", "ECOcloud@163.com", "sty123");
        //4、创建邮件
        Message message = createAdminMailException(session,email,title,startTime,endTime,name,count);
        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
        return ;
    }

    public static MimeMessage createAdminMailException(Session session, String email, String title,String startTime, String endTime,String name, int count) throws Exception {
        //创建邮件对象
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("ECOcloud@163.com"));
        //指明邮件的收件人，现在发件人和收件人是一样的，那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
        //邮件的标题
        message.setSubject(title);
        //邮件的文本内容
        message.setContent("您好，<br /> &emsp;&emsp;您的系统在"+startTime+"至"+endTime+"内共计被"+name+"频繁操作超过"+count+"次，被系统认为是恶意操作，请您对该账户进行监管。祝您生活愉快！<br /><p style='text-align:right;'>生物生态云大数据平台</p>", "text/html;charset=UTF-8");
        //返回创建好的邮件对象
        return message;
    }
}
